const match_cur_file_urlTag = 'match_cur_file_url';

const url_split = '/';

/**
 * 忽略 的 关联字 集
 * @type {string[]}
 */
const ignore_key_world_arr = ['src', 'Func', 'Class', 'DataDefine', ''];

/**
 * @type {RegExp}
 * 匹配 文件 的 链路 信息
 *
 */
// const reg_file_url =
//   /file:\/\/\/[A-Z]:\/(?<root>.*?)\/(?<center_url>.*\/)?(?<file_name>.*\..*)/;

const reg_file_url =
  /https?:\/\/(?<protocol>.*?):(?<port>[0-9]*?)\/(?<center_url>.*)\/(?<filename>.*?).js?.*?/;

// http:\/\/(?<protocol>.*?):(?<port>[0-9]*?)\/src\/.*(?<center_url>.*)\/.*?.js?.*?

class match_cur_file_url {
  get [Symbol.toStringTag]() {
    return match_cur_file_urlTag;
  }

  /**
   *
   * @param {string} file_url
   */
  constructor(file_url) {
    let match_info = file_url.match(reg_file_url);
    let group = match_info.groups;
    this.protocol = group.protocol;
    this.port = group.port;
    this.center_url = group.center_url;
    this.filename = group.filename;

    this.center_url_arr = this.center_url.split('/');
  }

  /**
   * 根元素
   * @type {string}
   */
  protocol;

  /**
   * 接口
   */
  port;

  /**
   * 中间 字符串
   * @type {string}
   */
  center_url;

  /**
   * 中间 路径 集
   * @type {string[]}
   */
  center_url_arr;

  /**
   * 当前 文件名
   * @type {string}
   */
  filename;

  /**
   * 忽略 的 关联字 集
   * @type {['src', 'Func', 'Class', 'DataDefine', '']}
   */
  ignore_url_key_world_arr = ignore_key_world_arr;

  /**
   * 返还 链路 url
   * 策略 忽略 src func 文件名 形成的 链路
   */
  link_url() {
    let ret = [];
    this.center_url_arr.forEach((val) => {
      if (!this.ignore_url_key_world_arr.includes(val)) {
        ret.push(val);
      }
    });

    return ret.join(url_split);
  }
}

export { match_cur_file_url };
